#include <iostream>
#include <thread>
#include <future>
#include <chrono>

void calculateSquare(std::promise<int> &&promise, int x) {
    // 模拟一些计算
    std::this_thread::sleep_for(std::chrono::seconds(2));
    promise.set_value(x * x); // 设置结果
}

int main() {
    // 创建一个 promise 对象
    std::promise<int> promise;

    // 获取与 promise 关联的 future 对象
    std::future<int> future = promise.get_future();

    // 启动一个线程来计算平方
    std::thread t(calculateSquare, std::move(promise), 5);

    // 在主线程中等待结果
    std::cout << "Calculating square..." << std::endl;
    int result = future.get(); // 阻塞，直到结果可用

    std::cout << "Square is: " << result << std::endl;

    // 等待线程结束
    t.join();

    return 0;
}

